package com.datastructure.linkedlist;



/**
 * @author: 临晖
 * @date: 2023/10/10
 * @description:
 */


/**
 * 链表应用一，移除链表元素
 */
public class Solution01 {


    /**
     * 给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
     * @param head
     * @param val
     * @return
     */
    public static ListNode removeElements(ListNode head, int val) {
        //思路一
        //这里判断头节点的值是否为val，如果是的话，则需要head向后移动
        //while (head != null && head.val == val) {
        //    head = head.next;
        //}
        //
        ////如果到了这里，说明head的值val一定不等于给定的val
        //ListNode first = head;
        //
        //
        //while (first != null && first.next != null) {
        //    //然后从head的下一个节点开始判断
        //    if (first.next.val == val) {
        //        first.next = first.next.next;
        //    } else {
        //        first = first.next;
        //    }
        //
        //}
        //return head;

        //思路二
        ListNode first = new ListNode();
        first.next = head;
        ListNode current = first;

        while (current.next != null) {
            if (current.next.val == val) {
                current.next = current.next.next;
            } else {
                current = current.next;
            }
        }

        return first.next;
    }

    public static void main(String[] args) {

    }
}


class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}
